/* 
 * Spring mixin mybatis frame code general
 * Fu(iknoweth@yahoo.com) All rights reserved 
 * 
 */
package com.pricl.biz.system.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.pricl.biz.system.dao.SystemCodeDao;
import com.pricl.biz.system.entity.SystemCode;
import com.pricl.biz.system.vo.CodeForm;
import com.pricl.frame.common.module.TreeNodeStr;
import com.pricl.frame.common.module.ValueText;
import com.pricl.frame.core.User;

/**
 * <p>
 * <strong>码表</strong>Biz Service
 * </p>
 *
 */
@Service
public class SystemCodeService {

	@Autowired
	SystemCodeDao dao;

	/**
	 * <p>
	 * 树型显示部门数据
	 * </p>
	 * 
	 * @param id
	 * @return List
	 */
	public List<TreeNodeStr> treeType(String id) {
		// 若没有传父Id，则默认给最高级
		if (id == null || id.isEmpty()) {
			id = "0";
		}
		List<TreeNodeStr> nodes = new ArrayList<TreeNodeStr>();
		List<TreeNodeStr> children = dao.findChildren(id);
		for (TreeNodeStr node : children) {
			nodes.add(node);
			node.children = treeType(String.valueOf(node.id));
		}
		return nodes;
	}

	/**
	 * <p>
	 * 获取参数列表
	 * </p>
	 * 
	 * @param type
	 * @return List
	 */
	public List<SystemCode> findCodes(String type) {
		return dao.findCodes(type);
	}

	/**
	 * <p>
	 * 保存码表信息
	 * </p>
	 * 
	 * @param form
	 * @param user
	 */
	public void save(CodeForm form, User user) {
		dao.deleteByType(form.getType());
		if (form.getCodes() != null) {
			for (SystemCode code : form.getCodes()) {
				code.setType(form.getType());
				dao.insertCode(code);
			}
		}
	}

	/**
	 * <p>
	 * 根据指定类型获取对应的字典对象列表
	 * </p>
	 * 
	 * @param type
	 * @return List
	 */
	public List<SystemCode> findByType(String type) {
		return dao.findByType(type);
	}

	/**
	 * <p>
	 * 根治指定的类型和代码获取字典值
	 * </p>
	 * 
	 * @param type
	 * @param code
	 * @return String
	 */
	public String findName(String type, String code) {
		return dao.findName(type, code);
	}

	/**
	 * <p>
	 * 根治指定的类型和代码获取字典代码
	 * </p>
	 * 
	 * @param type
	 * @param name
	 * @return String
	 */
	public String findCode(String type, String name) {
		return dao.findCode(type, name);
	}

	/**
	 * <p>
	 * 根据指定类型获取对应的字典键值对列表
	 * </p>
	 * 
	 * @param type
	 * @return List
	 */
	public List<ValueText> list(String type) {
		return dao.list(type);
	}

	/**
	 * <p>
	 * 获取所有有效的字典
	 * </p>
	 * 
	 * @return List
	 */
	public List<SystemCode> findAllValid() {
		return dao.findAllValid();
	}
}
